export default {
	/**
	 * 字符串格式的时间再次格式化
	 */
	strToFormat(strDate) {
		var date = Date.parse(strDate);
		return this.myTimeFormat(date, 'mm/dd hh:MM');
	},
	myTimeFormat(dateTime = null, fmt = 'yyyy-mm-dd hh:MM:ss') {
		// 如果为null,则格式化当前时间
		if (!dateTime) {
			dateTime = Number(new Date());
			return;
		}
		// 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式
		if (dateTime.toString().length == 10) dateTime *= 1000;
		let date = new Date(dateTime);
		let ret;
		let opt = {
			"y+": date.getFullYear().toString(), // 年
			"m+": (date.getMonth() + 1).toString(), // 月
			"d+": date.getDate().toString(), // 日
			"h+": date.getHours().toString(), // 时
			"M+": date.getMinutes().toString(), // 分
			"s+": date.getSeconds().toString() // 秒
			// 有其他格式化字符需求可以继续添加，必须转化成字符串
		};
		for (let k in opt) {
			ret = new RegExp("(" + k + ")").exec(fmt);
			if (ret) {
				fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
			};
		};
		return fmt;
	},
	/**
	 * 计算两个字符串类型时间的具体天、小时、分钟
	 * @param {Object} startDate
	 * @param {Object} endDate
	 */
	strDateToTime(startDate, endDate) {
		// startDate = startDate.replace(" ", "T");
		// endDate = endDate.replace(" ", "T");
		var d1 = Date.parse(startDate);
		var d2 = Date.parse(endDate);
		var timestamp = d2 - d1;
		// 将时间戳转换为毫秒
		const seconds = Math.floor(timestamp / 1000);
		const days = Math.floor(seconds / (3600 * 24));
		const hours = Math.floor((seconds % (3600 * 24)) / 3600);
		const minutes = Math.floor((seconds % 3600) / 60);
		const remainingSeconds = seconds % 60;
		// 返回结果对象
		return days + '天' + hours + '小时' + minutes + '分钟';
	},

	/**
	 * 计算两个字符串类型时间的具体天、小时、分钟
	 * @param {Object} startDate
	 * @param {Object} endDate
	 */
	strDateToTime2(startDate, endDate) {
		var d1 = Date.parse(startDate);
		var d2 = Date.parse(endDate);
		var timestamp = d2 - d1;
		// 将时间戳转换为毫秒
		const seconds = Math.floor(timestamp / 1000);
		const days = Math.floor(seconds / (3600 * 24));
		const hours = Math.floor((seconds % (3600 * 24)) / 3600);
		const minutes = Math.floor((seconds % 3600) / 60);
		const remainingSeconds = seconds % 60;
		var str = '';
		if (days > 0) {
			str += days + '天'
		}
		if (hours > 0) {
			str += hours + '小时'
		}
		if (minutes > 0) {
			str += minutes + '分钟'
		}
		if (timestamp == 0) {
			str = 0;
		}
		// 返回结果对象
		// return days + '天' + hours + '小时' + minutes + '分钟';
		return str;
	},
	/**
	 * 从身份证号获取年龄
	 * @param {string} idCard 身份证号码
	 * @returns {number} 年龄
	 */
	getIdCardAge(idCard) {
		// 同上方法的实现
		if (!idCard) return 0

		// 校验身份证号长度
		if (idCard.length !== 15 && idCard.length !== 18) {
			console.error('身份证号长度不正确')
			return 0
		}

		let birthDateStr

		// 处理15位身份证
		if (idCard.length === 15) {
			birthDateStr = '19' + idCard.substr(6, 6)
		}
		// 处理18位身份证
		else {
			birthDateStr = idCard.substr(6, 8)
		}

		// 解析出生日期
		const birthYear = parseInt(birthDateStr.substr(0, 4))
		const birthMonth = parseInt(birthDateStr.substr(4, 2)) - 1 // 月份从0开始
		const birthDay = parseInt(birthDateStr.substr(6, 2))

		const birthDate = new Date(birthYear, birthMonth, birthDay)
		const today = new Date()

		// 计算年龄
		let age = today.getFullYear() - birthDate.getFullYear()

		// 处理未到生日的情况
		const monthDiff = today.getMonth() - birthDate.getMonth()
		if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
			age--
		}
		return age
	},
	timestampToYear(timestamp) {
		var date2 = new Date();
		timestamp = date2.getTime() - timestamp;
		// 将时间戳转换为毫秒
		const seconds = Math.floor(timestamp / 1000);
		const year = Math.floor(seconds / (3600 * 24 * 365.25));
		// 返回结果对象
		return year;
	},
	// 计算时间戳格式的日期减去整数格式的天数后还剩多少天
	calculateRemainingDays(orderTimestamp, deadlineDays, currentTimestamp = Date.now()) {
		// 计算截止日期
		const deadlineDate = new Date(orderTimestamp + (deadlineDays * 24 * 60 * 60 * 1000));

		// 标准化日期到同一天的开始
		const currentDate = new Date(currentTimestamp);
		currentDate.setHours(0, 0, 0, 0);

		const deadlineStart = new Date(deadlineDate);
		deadlineStart.setHours(0, 0, 0, 0);

		// 计算天数差
		return Math.ceil((deadlineStart - currentDate) / (1000 * 60 * 60 * 24));


	}


}